Over-posting in ASP.NET Core application A security vulnerability
ASP.NET Core वेबएप्लिकेशन में ओवर-पोस्टिंग (Overposting)
ओवर-पोस्टिंग (Overposting) एक सिक्योरिटी वल्नरेबिलिटी (security vulnerability) है, जो तब होती है जब क्लाइंट से आने वाले डेटा में अप्रत्याशित या अनचाही प्रॉपर्टीज़ भी बाइंड हो जाती हैं और उन्हें सर्वर पर अपडेट या सेव कर दिया जाता है।
थोड़ा आसान भाषा में समझें — ओवर-पोस्टिंग का मतलब है:
एक उदाहरण से समझें (Without Protection)
मान लीजिए आपके पास एक मॉडल है:
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public bool IsAdmin { get; set; } // Should only be modified by admins
}
अब यदि आप कोई ऐसा कोड लिखते हैं:
[HttpPost]
public IActionResult Edit(User user)
{
_dbContext.Users.Update(user);
_dbContext.SaveChanges();
return RedirectToAction("Index");
}
अगर कोई user ऐसा फॉर्म सबमिट कर दे:
POST /user/edit
Content-Type: application/x-www-form-urlencoded
Id=1&Username=abc&Email=abc@example.com&IsAdmin=true
तो क्लाइंट ने IsAdmin=true भेज दिया — और क्योंकि आपने पूरे मॉडल को बाइंड किया है, IsAdmin प्रॉपर्टी भी अपडेट हो जाएगी! यह है ओवर-पोस्टिंग — एक आम यूज़र ने खुद को एडमिन बना लिया!
ओवर-पोस्टिंग कब-कब हो सकता है?
- जब पूरे मॉडल को ऑटोमैटिकली बाइंड किया जाए ([FromForm], [FromBody], etc.)
- जब ViewModel और Domain Model एक जैसे होते हैं (और separation नहीं होता)।
- जब फॉर्म या JSON में कोई अतिरिक्त प्रॉपर्टी भेज दी जाए जो यूज़र को भेजनी नहीं चाहिए।
- जब developer बिना सोचे-समझे Update() या Attach() जैसे मेथड्स यूज़ करता है।
ओवर-पोस्टिंग से बचने के उपाय
- Bind attribute से बाइंडिंग सीमित करें:
public IActionResult Edit([Bind("Id, Username, Email")] User user)
var existingUser = _dbContext.Users.Find(userDto.Id);
existingUser.Username = userDto.Username;
existingUser.Email = userDto.Email;
निष्कर्ष (Summary)
ओवर-पोस्टिंग एक ऐसा दृश्य है जहाँ यूज़र "पर्दे के पीछे" से एक्स्ट्रा स्क्रिप्ट भेजकर डायरेक्टर की कुर्सी हथियाने की कोशिश करता है। ASP.NET Core का Model Binding सिस्टम बड़ा ताकतवर है, लेकिन "जिसे जितनी जिम्मेदारी मिले, उतनी ही शक्ति दी जानी चाहिए" — इस सिद्धांत पर चलें, और ओवर-पोस्टिंग से बचें।
Next:
टिप्पणियाँ
एक टिप्पणी भेजें